home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 12 / BBS in a box XII-2.iso / Files II / Prog / B-C / C++Source Code Fmtr.sit / Src / StdFile.h / StdFile.h
Encoding:
C/C++ Source or Header  |  1992-04-28  |  4.8 KB  |  289 lines  |  [TEXT/MPS ]

  1. #ifndef __STDFILE__
  2. #define __STDFILE__ 1
  3.  
  4. #ifndef __TYPES__
  5. #include <types.h>
  6. #endif
  7.  
  8. #ifndef __STDIO__
  9. #include <stdio.h>
  10. #endif
  11.  
  12. #ifndef __STDLIB__
  13. #include <stdlib.h>
  14. #endif
  15.  
  16.  
  17. // Define our segment for outlined inlines
  18. #pragma segment StdFile
  19.  
  20.  
  21. class StdFile : public SingleObject {
  22. public:
  23.     StdFile();
  24.     StdFile(const FILE *f);
  25.     StdFile(const char *fileName, const char *mode);
  26.     StdFile(const StdFile &aStdFile);
  27.  
  28.     virtual ~StdFile();
  29.  
  30.  
  31.     FILE *Open(const char *fileName, const char *mode);
  32.     // Open the StdFile independent of other operations
  33.  
  34.     void Close();
  35.     // Close the StdFile
  36.  
  37.     operator FILE *() const;
  38.     // Get the FILE* (as for fscanf)
  39.  
  40.  
  41.     // Formatted output operations
  42.     inline int Putc(int c) const;
  43.     inline int Puts(const char *str) const;
  44.     inline int Print(const char *str) const;
  45.     inline int Print(int v) const;
  46.     inline int Print(extended v) const;
  47.     inline int Printf(const char *fmt, ...) const;
  48.  
  49.     // Unformatted output operations
  50.     inline size_t Write(const void *p, size_t n) const;
  51.     inline size_t Write(const void *p, size_t s, size_t n) const;
  52.  
  53.     void Flush() const;
  54.  
  55.     // Formatted input operations
  56.     char *Gets(char *s, int n) const;
  57.     int Getc() const;
  58.     int Get(unsigned char &v) const;
  59.     int Get(unsigned short &v) const;
  60.     int Get(unsigned int &v) const;
  61.     int Get(unsigned long &v) const;
  62.     int Get(char &v) const;
  63.     int Get(short &v) const;
  64.     int Get(int &v) const;
  65.     int Get(long &v) const;
  66.     int Get(float &v) const;
  67.     int Get(double &v) const;
  68.     int Get(extended &v) const;
  69.     int Ungetc(int c) const;
  70.  
  71.     // Unformatted input operations
  72.     size_t Read(void *p, size_t n) const;
  73.     size_t Read(void *p, size_t s, size_t n) const;
  74.  
  75.  
  76.     // Seek operations
  77.     int Seek(long offset, int origin = SEEK_SET) const;
  78.     void Rewind() const;
  79.  
  80.     int GetPos(fpos_t *p) const;
  81.     int SetPos(fpos_t *p) const;
  82.  
  83.     size_t GetSize() const;
  84.     /*
  85.     ** Return length of the file.  Returns 0 on error or if the file
  86.     ** is a standard input file which is not connected to a real
  87.     ** disk file
  88.     */
  89.  
  90.  
  91.     // Error operations
  92.     void ClearErr() const;
  93.     Boolean IsEOF() const;
  94.     int Error() const;
  95.  
  96.  
  97. private:
  98.     Boolean fIsCopy;                            // True if constructed from a StdFile
  99.     FILE *fFile;
  100.  
  101. private:
  102.     static const char sOIFmt[];                    // Output integer format
  103.     static const char sOEFmt[];                    // Output floating point format
  104.  
  105.     static const char sIUCFmt[];                // Input unsigned char format...
  106.     static const char sIUSFmt[];
  107.     static const char sIUIFmt[];
  108.     static const char sIULFmt[];
  109.     static const char sICFmt[];
  110.     static const char sISFmt[];
  111.     static const char sIIFmt[];
  112.     static const char sILFmt[];
  113.     static const char sIFFmt[];
  114.     static const char sIDFmt[];
  115.     static const char sIEFmt[];
  116. };
  117.  
  118.  
  119. // Standard file descriptors
  120. extern StdFile gStdin;
  121. extern StdFile gStdout;
  122. extern StdFile gStderr;
  123.  
  124.  
  125. inline StdFile::StdFile()
  126.     : fFile(0),
  127.       fIsCopy(false)
  128.     {
  129.     }
  130.  
  131.  
  132. inline StdFile::StdFile(const FILE *f)
  133.     : fFile((FILE *)f),
  134.       fIsCopy(false)
  135.     {
  136.     }
  137.  
  138.  
  139. inline StdFile::StdFile(const char *fileName, const char *mode)
  140.     : fFile(fopen(fileName, mode)),
  141.       fIsCopy(false)
  142.     {
  143.     }
  144.  
  145.  
  146. inline StdFile::StdFile(const StdFile &aStdFile)
  147.     : fFile(aStdFile.fFile),
  148.       fIsCopy(true)
  149.     {
  150.     }
  151.  
  152.  
  153. inline FILE *StdFile::Open(const char *fileName, const char *mode)
  154. {
  155.     return (fFile = fopen(fileName, mode));
  156. }
  157.  
  158.  
  159. inline StdFile::operator FILE *() const
  160. {
  161.     return (fFile);
  162. }
  163.  
  164.  
  165. inline int StdFile::Putc(int c) const
  166. {
  167.     return (putc(c, fFile));
  168. }
  169.  
  170.  
  171. inline int StdFile::Print(const char *str) const
  172. {
  173.     return (fputs(str, fFile));
  174. }
  175.  
  176.  
  177. inline int StdFile::Puts(const char *str) const
  178. {
  179.     Print(str);
  180.     return (Putc('\n'));
  181. }
  182.  
  183.  
  184. inline int StdFile::Print(int v) const
  185. {
  186.     return (Printf(sOIFmt, v));
  187. }
  188.  
  189.  
  190. inline int StdFile::Print(extended v) const
  191. {
  192.     return (Printf(sOEFmt, v));
  193. }
  194.  
  195.  
  196. inline size_t StdFile::Write(const void *p, size_t s, size_t n) const
  197. {
  198.     return (fwrite(p, s, n, fFile));
  199. }
  200.  
  201.  
  202. inline size_t StdFile::Write(const void *p, size_t n) const
  203. {
  204.     return (Write(p, sizeof(char), n));
  205. }
  206.  
  207.  
  208. inline void StdFile::Flush() const
  209. {
  210.     fflush(fFile);
  211. }
  212.  
  213.  
  214. inline char *StdFile::Gets(char *s, int n) const
  215. {
  216.     return (fgets(s, n, fFile));
  217. }
  218.  
  219.  
  220. inline int StdFile::Getc() const
  221. {
  222.     return (getc(fFile));
  223. }
  224.  
  225.  
  226. inline int StdFile::Ungetc(int c) const
  227. {
  228.     return (ungetc(c, fFile));
  229. }
  230.  
  231.  
  232. inline size_t StdFile::Read(void *p, size_t s, size_t n) const
  233. {
  234.     return (fread(p, s, n, fFile));
  235. }
  236.  
  237.  
  238. inline size_t StdFile::Read(void *p, size_t n) const
  239. {
  240.     return (Read(p, sizeof(char), n));
  241. }
  242.  
  243.  
  244. inline int StdFile::Seek(long offset, int origin) const
  245. {
  246.     return (fseek(fFile, offset, origin));
  247. }
  248.  
  249.  
  250. inline void StdFile::Rewind() const
  251. {
  252.     rewind(fFile);
  253. }
  254.  
  255.  
  256. inline int StdFile::GetPos(fpos_t *p) const
  257. {
  258.     return (fgetpos(fFile, p));
  259. }
  260.  
  261.  
  262. inline int StdFile::SetPos(fpos_t *p) const
  263. {
  264.     return (fsetpos(fFile, p));
  265. }
  266.  
  267.  
  268. inline void StdFile::ClearErr() const
  269. {
  270.     clearerr(fFile);
  271. }
  272.  
  273.  
  274. inline Boolean StdFile::IsEOF() const
  275. {
  276.     return (feof(fFile));
  277. }
  278.  
  279.  
  280. inline int StdFile::Error() const
  281. {
  282.     return (ferror(fFile));
  283. }
  284.  
  285.  
  286. #endif
  287.  
  288.  
  289.